import { useUserStore } from "@/stores/user"
import { getToken } from "@/utils/auth"
import axios from "axios"
import { ElMessage } from "element-plus"
// 设置 axios 的配置
const config = {
  // 这里是vite，会处理 /dev-api
  baseURL: import.meta.env.VITE_BASE_API,
  // 超时时间，一般10s 左右
  timeout: 3000
}

// 创建 axios 的实例
const service = axios.create(config)
service.interceptors.request.use(
  (config) => {
    const token = getToken()
    if (token) {
      // 每次请求，要携带token
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  (err) => {
    // 发请求失败，走这里
    return Promise.reject(err)
  }
)

service.interceptors.response.use(
  (response) => {
    // code
    const { statusCode, message } = response.data

    // 响应必须判断 状态码，判断请求是否成功
    const successCode = [200, 201]
    if (!successCode.includes(statusCode)) {
      ElMessage.error(message)
      return Promise.reject(message)
    }
    return response.data
  },
  (err) => {
    // 响应失败（失败码），走这里
    const store = useUserStore()
    const res = err.response
    if (res.status === 401) {
      // 401 说明token不正确，
      // 403 说明 登陆了，但没权限
      // 移除token
      store.logout()
      window.location.reload()
    }
    return Promise.reject(err)
  }
)
export default service
